package in.rob.client.widget; import android.app.NotificationManager; import android.appwidget.AppWidgetManager; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.widget.RemoteViews; import android.widget.RemoteViewsService; import in.data.stream.PostStream; import in.lib.Constants; import in.lib.manager.CacheManager; import in.lib.manager.UserManager; import in.model.Post; import in.rob.client.R; public class ScrollWidgetService extends RemoteViewsService { public class WidgetViewsFactory implements RemoteViewsFactory { private Context context; private final int widgetID; private int listItemRes = R.layout.widget_message_list_item ; private PostStream stream; public WidgetViewsFactory(Context context, Intent intent) { this.context = context; this.widgetID = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); stream = CacheManager.getInstance().readFile(String.format(Constants.CACHE_TIMELINE, UserManager.getInstance().getUser().getId()), PostStream.class); } @Override public int getCount() { return stream == null ? 0 : stream.getItems().size(); } @Override public long getItemId(int position) { return position; } @Override public RemoteViews getLoadingView() { return null; } @Override public RemoteViews getViewAt(int position) { final RemoteViews row = new RemoteViews(context.getPackageName(), listItemRes); if (position < getCount()) { Post post = ((Post)stream.getItems().get(position)); row.setTextViewText(R.id.title, post.getPoster().getFormattedMentionNameTitle()); row.setTextViewText(R.id.sub_title, post.getPoster().getFormattedMentionNameSubTitle()); row.setTextViewText(R.id.time, post.getDateStr()); row.setTextViewText(R.id.text, post.getPostText().getText()); row.setImageViewResource(R.id.avatar, R.drawable.default_avatar); Intent intent = new Intent(); intent.putExtra(Constants.EXTRA_POST, post); row.setOnClickFillInIntent(R.id.root_view, intent); } return row; } @Override public int getViewTypeCount() { return 1; } @Override public boolean hasStableIds() { return true; } @Override public void onDataSetChanged() { NotificationManager manager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); manager.cancel(widgetID); } @Override public void onCreate(){} @Override public void onDestroy(){} } @Override public RemoteViewsFactory onGetViewFactory(Intent intent) { return new WidgetViewsFactory(getApplicationContext(), intent); } }